package com.zxh.okretrofit;


import com.zxh.okretrofit.entity.BaseEntity;
import com.zxh.okretrofit.entity.BaseListEntity;

import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.OPTIONS;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Url;

/**
 * 动态配置Url，统一的对服务器进行操作
 * <p>
 * 遵循《RESTFUL》标准
 * Created by zhangxuehui on 2018/2/2.
 */
public interface ApiService {
    /**
     * 从服务器获取所有资源
     * <p>
     * 获取基本数据
     *
     * @param url
     * @return
     */
    @GET
    Observable<BaseEntity<?>> rxGetData(@Url String url);

    /**
     * 从服务器获取所有资源
     * <p>
     * 获取基本数据
     *
     * @param url
     * @return
     */
    @GET
    Call<BaseEntity<?>> getData(@Url String url);

    /**
     * 从服务器获取所有资源
     * <p>
     * 获取列表数据
     *
     * @param url
     * @return
     */
    @GET
    Observable<BaseListEntity<?>> getListData(@Url String url);

    /**
     * 在服务器中添加心的资源
     *
     * @param url
     * @return
     */
    @POST
    Observable<BaseEntity<?>> postData(@Url String url);

    /**
     * 在服务器中更新资源，提供全部的资源，即修改所有的资源
     *
     * @param url
     * @return
     */
    @PUT
    Observable<BaseEntity<?>> putData(@Url String url);

    /**
     * 在服务器中更新资源，仅提供更改的属性，即修改部分资源的属性
     *
     * @param url
     * @return
     */
    @PATCH
    Observable<BaseEntity<?>> patchData(@Url String url);

    /**
     * 从服务器中删除资源
     *
     * @param url
     * @return
     */
    @DELETE
    Observable<BaseEntity<?>> deleteData(@Url String url);

}
